MyBatis

您所在的位置:网站首页 mybatis 生成mapper缺少 MyBatis

MyBatis

2024-01-20 08:10| 来源: 网络整理| 查看: 265

这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

MyBatis-Plus 官方文档:mp.baomidou.com/guide/gener…

image-20211121150529787

这是官网上的文档,从官方文档中给快速生成代码中,可以看出代码生成器的配置结构为:

//1、配置数据源 FastAutoGenerator.create("url", "username", "password") //2、全局配置 .globalConfig(...) //3、包配置 .packageConfig(...) //4、策略配置 .strategyConfig(...) //5、模板引擎配置 .templateEngine(...) //6、执行 .execute();

我们只需要通过填空的方式去配置数据源(DataSource),全局配置(GlobalConfig),包配置(PackageConfig),策略配置(StrategyConfig)和模板引擎配置(TemplateEngine)即可。

官方文档上也给出了对于每一个配置我们可以进行什么操作。

配置 数据源配置(DataSource) 属性说明示例urljdbc路径jdbc:mysql://127.0.0.1:3306/mybatis-plususername数据库账号rootpassword数据库密码123456dbQuery(IDbQuery)数据库查询new MySqlQuery()schema(String)数据库schema(部分数据库适用)mybatis-plustypeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert()keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler() 全局配置(GlobalConfig) 方法说明示例fileOverride覆盖已生成文件默认值:falsedisableOpenDir禁止打开输出目录默认值:trueoutputDir(String)指定输出目录/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmpauthor(String)作者名baomidou 默认值:作者enableKotlin开启 kotlin 模式默认值:falseenableSwagger开启 swagger 模式默认值:falsedateType(DateType)时间策略DateType.ONLY_DATE=Date 默认值: DateType.TIME_PACK=LocalDateTimecommentDate(String)注释日期默认值: yyyy-MM-dd 包配置(PackageConfig) 方法说明示例parent(String)父包名默认值:com.baomidoumoduleName(String)父包模块名默认值:无entity(String)Entity 包名默认值:entityservice(String)Service 包名默认值:serviceserviceImpl(String)Service Impl 包名默认值:service.implmapper(String)Mapper 包名默认值:mappermapperXml(String)Mapper XML 包名默认值:mapper.xmlcontroller(String)Controller 包名默认值:controllerother(String)自定义文件包名输出自定义文件时所用到的包名pathInfo(Map)路径配置信息Collections.singletonMap(OutputFile.mapperXml, "D://") 策略配置(StrategyConfig) 方法说明示例enableCapitalMode开启大写命名默认值:falseenableSkipView开启跳过视图默认值:falsedisableSqlFilter禁用 sql 过滤默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关enableSchema启用 schema默认值:false,多 schema 场景的时候打开likeTable(LikeTable)模糊表匹配(sql 过滤)likeTable 与 notLikeTable 只能配置一项notLikeTable(LikeTable)模糊表排除(sql 过滤)likeTable 与 notLikeTable 只能配置一项addInclude(String...)增加表匹配(内存过滤)include 与 exclude 只能配置一项addExclude(String...)增加表排除匹配(内存过滤)include 与 exclude 只能配置一项addTablePrefix(String...)增加过滤表前缀addTableSuffix(String...)增加过滤表后缀addFieldPrefix(String...)增加过滤字段前缀addFieldSuffix(String...)增加过滤字段后缀entityBuilder实体策略配置controllerBuildercontroller 策略配置mapperBuildermapper 策略配置serviceBuilderservice 策略配置 模板引擎配置(TemplateEngine)

默认 Velocity ;可选模板引擎 Beetl 或 Freemarker。

模板引擎代码Velocity默认.templateEngine(new VelocityTemplateEngine())Freemarker可选.templateEngine(new FreemarkerTemplateEngine())Beetl可选.templateEngine(new BeetlTemplateEngine()) 代码生成器测试样例

那么知道配置之后我们可以自己写一个操作一下。

步骤: 1、创建测试数据库 mp CREATE DATABASE mp; USE `mp`; /*Table structure for table `student` */ CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号', `name` varchar(50) DEFAULT NULL COMMENT '姓名', `score` double DEFAULT NULL COMMENT '成绩', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `user` */ CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(50) DEFAULT NULL COMMENT '密码', `create_time` date DEFAULT NULL COMMENT '创建时间', `modify_time` date DEFAULT NULL COMMENT '最后一次修改时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; FieldTypeCommentidint用户idusernamevarchar(50)用户名passwordvarchar(50)密码create_timedate创建时间modify_timedate最后一次修改时间 FieldTypeCommentidint学号namevarchar(50)名字scoredouble成绩 2、创建一个 Spring-Boot 项目

image-20211121144541404

3、在 pom.xml 中导入相关依赖 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test io.swagger swagger-annotations 1.6.3 org.projectlombok lombok mysql mysql-connector-java 8.0.26 com.baomidou mybatis-plus-boot-starter 3.4.3.4 com.baomidou mybatis-plus-generator 3.5.1 org.apache.velocity velocity-engine-core 2.3 org.freemarker freemarker 2.3.31 com.ibeetl beetl 3.8.1.RELEASE

注:模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker,实际使用中只导入使用模板对应的依赖即可,不用全部导入。

4、编写一个mian方法,加上框架 public static void main(String[] args) { //1、配置数据源 FastAutoGenerator.create("url", "username", "password") //2、全局配置 .globalConfig(...) //3、包配置 .packageConfig(...) //4、策略配置 .strategyConfig(...) //5、模板引擎配置 .templateEngine(...) //6、执行 .execute(); } 5、进行数据源配置 public static void main(String[] args) { //1、配置数据源 FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp", "root", "123456") //2、全局配置 .globalConfig(...) //3、包配置 .packageConfig(...) //4、策略配置 .strategyConfig(...) //5、模板引擎配置 .templateEngine(...) //6、执行 .execute(); } 6、进行全局配置

注:3.5.1+版本开始支持 lambda 表达式

//2、全局配置 .globalConfig(builder -> { builder.author("Jie") // 设置作者名 .outputDir(System.getProperty("user.dir") + "/src/main/java") //设置输出路径 .commentDate("yyyy-MM-dd hh:mm:ss") //注释日期 .dateType(DateType.ONLY_DATE) //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date; .fileOverride() //覆盖之前的文件 .enableSwagger() //开启 swagger 模式 .disableOpenDir(); //禁止打开输出目录,默认打开 }); 7、进行 包配置 //3、包配置 .packageConfig(builder -> { builder.parent("com") // 设置父包名 .moduleName("mp") //设置模块包名 .entity("entity") //pojo 实体类包名 .service("service") //Service 包名 .serviceImpl("serviceImpl") // ***ServiceImpl 包名 .mapper("mapper") //Mapper 包名 .xml("mapper") //Mapper XML 包名 .controller("controller") //Controller 包名 .other("utils") //自定义文件包名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper")) //配置 **Mapper.xml 路径信息:项目的 resources 目录的 Mapper 目录下 }); 8、策略配置

策略配置中需要对 Mapper,Service,Entity,Controller 类的生成策略进行单独的配置。

//4、策略配置 .strategyConfig(builder -> { builder.addInclude("user", "student") // 设置需要生成的数据表名 .addTablePrefix("t_", "c_") // 设置过滤表前缀 //4.1、Mapper策略配置 .mapperBuilder() .superClass(BaseMapper.class) //设置父类 .formatMapperFileName("%sMapper") //格式化 mapper 文件名称 .enableMapperAnnotation() //开启 @Mapper 注解 .formatXmlFileName("%sXml"); //格式化 Xml 文件名称 //4.2、service 策略配置 .serviceBuilder() .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl //4.3、实体类策略配置 .entityBuilder() .enableLombok() //开启 Lombok .disableSerialVersionUID() //不实现 Serializable 接口,不生产 SerialVersionUID .logicDeleteColumnName("deleted") //逻辑删除字段名 .naming(NamingStrategy.underline_to_camel) //数据库表映射到实体的命名策略:下划线转驼峰命 .columnNaming(NamingStrategy.underline_to_camel) //数据库表字段映射到实体的命名策略:下划线转驼峰命 .addTableFills( new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE) ) //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间 .enableTableFieldAnnotation() // 开启生成实体时生成字段注解 //4.4、Controller策略配置 .controllerBuilder() .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController .enableRestStyle() //开启生成 @RestController 控制器 }) 9、模板引擎配置 //5、模板引擎 .templateEngine(new VelocityTemplateEngine()) //默认 /* .templateEngine(new FreemarkerTemplateEngine()) .templateEngine(new BeetlTemplateEngine()) */ 10、执行 //6、执行 .execute(); 执行效果演示:

注:这里使用的是附2的交互式生成,两者源码几乎没有区别。

代码自动生成效果

image-20211121162318620

附1:快速生成样例代码 public static void main(String[] args) { //1、配置数据源 FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp", "root", "123456") //2、全局配置 .globalConfig(builder -> { builder.author("Jie") // 设置作者名 .outputDir(System.getProperty("user.dir") + "/src/main/java") //设置输出路径:项目的 java 目录下 .commentDate("yyyy-MM-dd hh:mm:ss") //注释日期 .dateType(DateType.ONLY_DATE) //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date; .fileOverride() //覆盖之前的文件 .enableSwagger() //开启 swagger 模式 .disableOpenDir(); //禁止打开输出目录,默认打开 }) //3、包配置 .packageConfig(builder -> { builder.parent("com") // 设置父包名 .moduleName("mp") //设置模块包名 .entity("entity") //pojo 实体类包名 .service("service") //Service 包名 .serviceImpl("serviceImpl") // ***ServiceImpl 包名 .mapper("mapper") //Mapper 包名 .xml("mapper") //Mapper XML 包名 .controller("controller") //Controller 包名 .other("utils") //自定义文件包名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper")) //配置 mapper.xml 路径信息:项目的 resources 目录下 }) //4、策略配置 .strategyConfig(builder -> { builder.addInclude("user", "student") // 设置需要生成的数据表名 .addTablePrefix("t_", "c_") // 设置过滤表前缀 //4.1、Mapper策略配置 .mapperBuilder() .superClass(BaseMapper.class) //设置父类 .formatMapperFileName("%sMapper") //格式化 mapper 文件名称 .enableMapperAnnotation() //开启 @Mapper 注解 .formatXmlFileName("%sXml"); //格式化 Xml 文件名称 //4.2、service 策略配置 .serviceBuilder() .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl //4.3、实体类策略配置 .entityBuilder() .enableLombok() //开启 Lombok .disableSerialVersionUID() //不实现 Serializable 接口,不生产 SerialVersionUID .logicDeleteColumnName("deleted") //逻辑删除字段名 .naming(NamingStrategy.underline_to_camel) //数据库表映射到实体的命名策略:下划线转驼峰命 .columnNaming(NamingStrategy.underline_to_camel) //数据库表字段映射到实体的命名策略:下划线转驼峰命 .addTableFills( new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE) ) //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间 .enableTableFieldAnnotation() // 开启生成实体时生成字段注解 //4.4、Controller策略配置 .controllerBuilder() .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController .enableRestStyle() //开启生成 @RestController 控制器 }) //5、模板 .templateEngine(new VelocityTemplateEngine()) /* .templateEngine(new FreemarkerTemplateEngine()) .templateEngine(new BeetlTemplateEngine()) */ //6、执行 .execute(); } 附2:交互式生成样例代码 public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("=====================数据库配置======================="); System.out.println("请输入 URL"); String url = scan.next(); System.out.println("请输入 username"); String username = scan.next(); System.out.println("请输入 password"); String password = scan.next(); FastAutoGenerator.create(url, username, password) // 全局配置 .globalConfig((scanner, builder) -> builder.author(scanner.apply("=====================全局配置=======================\n请输入作者名称?")) .outputDir(System.getProperty("user.dir") + "/src/main/java") .commentDate("yyyy-MM-dd hh:mm:ss") .dateType(DateType.TIME_PACK) .enableSwagger() .fileOverride() .enableSwagger() .disableOpenDir() ) // 包配置 .packageConfig((scanner, builder) -> builder.parent(scanner.apply("=====================包配置=======================\n请输入包名?")) .moduleName(scanner.apply("请输入父包模块名?")) .entity("entity") .service("service") .serviceImpl("serviceImpl") .mapper("mapper") .xml("mapper") .other("utils") .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper")) ) // 策略配置 .strategyConfig((scanner, builder) -> { builder.addInclude(getTables(scanner.apply("=====================策略配置=======================\n请输入表名,多个英文逗号分隔?所有输入 all"))) .serviceBuilder() .formatServiceFileName("%sService") .formatServiceImplFileName("%sServiceImpl") .entityBuilder() //实体类策略配置 .enableLombok() //开启 Lombok .disableSerialVersionUID() .logicDeleteColumnName("deleted") //逻辑删除字段 .naming(NamingStrategy.underline_to_camel) .columnNaming(NamingStrategy.underline_to_camel) .addTableFills(new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE)) .enableTableFieldAnnotation() // 开启生成实体时生成字段注解 .controllerBuilder() .formatFileName("%sController") .enableRestStyle() .mapperBuilder() .superClass(BaseMapper.class) .formatMapperFileName("%sMapper") .enableMapperAnnotation() //@mapper .formatXmlFileName("%sMapper"); }) /* 模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker .templateEngine(new BeetlTemplateEngine()) .templateEngine(new FreemarkerTemplateEngine()) */ .execute(); } // 处理 all 情况 protected static List getTables(String tables) { return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(",")); }


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3